import axios from 'axios'
import Cookies from 'js-cookie'
import router from '@/router'
import { Message } from 'element-ui'

axios.defaults.withCredentials = true

export default function $axios(options) {
    let baseUrl = ''
    if (process.env.NODE_ENV === 'production') {
        baseUrl = process.env.VUE_APP_BASE_API
    } else {
        baseUrl = options.mock ? process.env.VUE_APP_BASE_API + '/mock' : process.env.VUE_APP_BASE_API
    }
    return new Promise((resolve, reject) => {
        const instance = axios.create({
            baseURL: baseUrl, // config.baseUrl,
            headers: {
                'Content-Type': 'application/json;charset=UTF-8',
                //  username: 'zhenpinwang'
                'app-token': '$2a$10$fCgok0KM0zkKsLu/RURaz.Y1/DNCjef0Ay4R79FLXFb/jBqxiAh8i'
            },
            timeout: 10000
            // paramsSerializer: function(params) {
            //   return qs.stringify(params, {
            //     arrayFormat: "brackets"
            //   });
            // }
            //withCredentials: config.withCredentials
        })

        // request 请求拦截器
        instance.interceptors.request.use(
            config => {
                const uid = Cookies.get('userName')
                config.headers.username = uid
                //  config.headers['Authorization'] = uid
                if (options.method === 'post') {
                    // config.params = {}
                    // config.data = qs.stringify(config.data)
                }
                let token = Cookies.get('userName')
                // 发送请求时携带token
                // if (token) {
                //     config.headers.token = token
                // } else {
                //     // 重定向到登录页面
                //     //router.push('/login')
                // }
                return config
            },
            error => {
                // 请求发生错误时
                // console.log("request:", error);
                // // 判断请求超时
                // if (
                //   error.code === "ECONNABORTED" &&
                //   error.message.indexOf("timeout") !== -1
                // ) {
                //   console.log("timeout请求超时");
                // }
                // 需要重定向到错误页面
                //  const errorInfo = error.response;
                //  console.log(errorInfo);
                // if (errorInfo) {
                //   error = errorInfo.data; // 页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
                //   const errorStatus = errorInfo.status; // 404 403 500 ...
                //   router.push({
                //     path: `/error/${errorStatus}`
                //   });
                // }
                return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
            }
        )

        // response 响应拦截器
        instance.interceptors.response.use(
            res => {
                if (res.data.code === 200 || res.data.code === '200' || res.data.code === '000000') {
                    return resolve(res.data)
                } else {
                    Message.error(res.data.msg)
                    return reject(res.data)
                }
            },
            err => {
                if (err && err.response) {
                    console.log('response')
                    switch (err.response.status) {
                        case 400:
                            err.message = '请求错误'
                            break
                        case 401:
                            err.message = '未授权，请登录'
                            break
                        case 403:
                            err.message = '拒绝访问'
                            break
                        case 404:
                            console.log('没有登录去登录')
                            //  window.open("http://back.dev.zp.com/sys/login");
                            err.message = `请求地址出错: ${err.response.config.url}`
                            break
                        case 408:
                            err.message = '请求超时'
                            break
                        case 500:
                            err.message = '服务器内部错误'
                            Message.error('服务器内部错误,请稍等一下哦~~')
                            break
                        case 501:
                            err.message = '服务未实现'
                            break
                        case 502:
                            err.message = '网关错误'
                            break
                        case 503:
                            err.message = '服务不可用'
                            Message.error('服务不可用,请稍等一下哦~~')
                            break
                        case 504:
                            err.message = '网关超时'
                            break
                        case 505:
                            err.message = 'HTTP版本不受支持'
                            break
                        default:
                    }
                }
                console.error(err)
                return reject(err) // 返回接口返回的错误信息
            }
        )
        // 请求处理
        instance(options)
            .then(res => {
                resolve(res)
                return false
            })
            .catch(error => {
                reject(error)
            })
    })
}
